package muhnes.sizoo.dal;

import muhnes.sizoo.HibernateUtilZoologia;
import muhnes.sizoo.modelo.Municipio;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 * Clase que implementa los metodos definidos en MunicipioDao
 */
public class MunicipioDaoImpl extends GenericoDAO< Municipio, Integer >  
                              implements MunicipioDao {
    
    public MunicipioDaoImpl() {
        super( HibernateUtilZoologia.getSessionFactory() );
    }
    
    @Override
    protected Class<?> getClaseEntidad () {
        return Municipio.class;
    }

    /**
     * Método que verifica que los municipios sean unicos.
     *  
     */
    @Override
    public boolean verificarUnicidad(Municipio entidad) {
        
        Session sesion = fabricaSesion.getCurrentSession();        
        String hql = "from Municipio where codigomunicipio != :codigo " + 
                     "and upper(nombre) = :nombre " +
                     "and codigodepartamento = :codigodepartamento";
        Query consulta = sesion.createQuery( hql );
        consulta.setParameter("codigo",entidad.getCodigomunicipio());
        consulta.setParameter("nombre", entidad.getNombre().toUpperCase());
        consulta.setParameter("codigodepartamento", entidad.getDepartamento().getCodigodepartamento());
        return consulta.uniqueResult() != null ? true : false;
    }
    
     /**
     * Método que verifica que la entidad sea independiente de otras entidades.
     *  
     */
    @Override
    public boolean verificarDependencia (Municipio entidad) {
        Session sesion = fabricaSesion.getCurrentSession();        
        String hql = "from Zona where municipio.codigomunicipio = :codigo";
        Query consulta = sesion.createQuery( hql );
        consulta.setParameter("codigo",entidad.getCodigomunicipio());
        return !consulta.list().isEmpty();
    }
  
}
